// Copyright (C) 2025 Intel Corporation
// SPDX-License-Identifier: Apache-2.0
//

#include "ocl_common.hpp"

namespace cldnn {
namespace ocl {

// Ordered by value as defined by opencl
const char *convert_cl_err_to_str(cl_int cl_status) {
    #define CL_STATUS_CASE(status) \
        case status: return #status
        switch (cl_status) {
            CL_STATUS_CASE(CL_SUCCESS);
            CL_STATUS_CASE(CL_DEVICE_NOT_FOUND);
            CL_STATUS_CASE(CL_DEVICE_NOT_AVAILABLE);
            CL_STATUS_CASE(CL_COMPILER_NOT_AVAILABLE);
            CL_STATUS_CASE(CL_MEM_OBJECT_ALLOCATION_FAILURE);
            CL_STATUS_CASE(CL_OUT_OF_RESOURCES);
            CL_STATUS_CASE(CL_OUT_OF_HOST_MEMORY);
            CL_STATUS_CASE(CL_PROFILING_INFO_NOT_AVAILABLE);
            CL_STATUS_CASE(CL_MEM_COPY_OVERLAP);
            CL_STATUS_CASE(CL_IMAGE_FORMAT_MISMATCH);
            CL_STATUS_CASE(CL_IMAGE_FORMAT_NOT_SUPPORTED);
            CL_STATUS_CASE(CL_BUILD_PROGRAM_FAILURE);
            CL_STATUS_CASE(CL_MAP_FAILURE);
            CL_STATUS_CASE(CL_MISALIGNED_SUB_BUFFER_OFFSET);
            CL_STATUS_CASE(CL_EXEC_STATUS_ERROR_FOR_EVENTS_IN_WAIT_LIST);
            CL_STATUS_CASE(CL_COMPILE_PROGRAM_FAILURE);
            CL_STATUS_CASE(CL_LINKER_NOT_AVAILABLE);
            CL_STATUS_CASE(CL_LINK_PROGRAM_FAILURE);
            CL_STATUS_CASE(CL_DEVICE_PARTITION_FAILED);
            CL_STATUS_CASE(CL_KERNEL_ARG_INFO_NOT_AVAILABLE);
            CL_STATUS_CASE(CL_INVALID_VALUE);
            CL_STATUS_CASE(CL_INVALID_DEVICE_TYPE);
            CL_STATUS_CASE(CL_INVALID_PLATFORM);
            CL_STATUS_CASE(CL_INVALID_DEVICE);
            CL_STATUS_CASE(CL_INVALID_CONTEXT);
            CL_STATUS_CASE(CL_INVALID_QUEUE_PROPERTIES);
            CL_STATUS_CASE(CL_INVALID_COMMAND_QUEUE);
            CL_STATUS_CASE(CL_INVALID_HOST_PTR);
            CL_STATUS_CASE(CL_INVALID_MEM_OBJECT);
            CL_STATUS_CASE(CL_INVALID_IMAGE_FORMAT_DESCRIPTOR);
            CL_STATUS_CASE(CL_INVALID_IMAGE_SIZE);
            CL_STATUS_CASE(CL_INVALID_SAMPLER);
            CL_STATUS_CASE(CL_INVALID_BINARY);
            CL_STATUS_CASE(CL_INVALID_BUILD_OPTIONS);
            CL_STATUS_CASE(CL_INVALID_PROGRAM);
            CL_STATUS_CASE(CL_INVALID_PROGRAM_EXECUTABLE);
            CL_STATUS_CASE(CL_INVALID_KERNEL_NAME);
            CL_STATUS_CASE(CL_INVALID_KERNEL_DEFINITION);
            CL_STATUS_CASE(CL_INVALID_KERNEL);
            CL_STATUS_CASE(CL_INVALID_ARG_INDEX);
            CL_STATUS_CASE(CL_INVALID_ARG_VALUE);
            CL_STATUS_CASE(CL_INVALID_ARG_SIZE);
            CL_STATUS_CASE(CL_INVALID_KERNEL_ARGS);
            CL_STATUS_CASE(CL_INVALID_WORK_DIMENSION);
            CL_STATUS_CASE(CL_INVALID_WORK_GROUP_SIZE);
            CL_STATUS_CASE(CL_INVALID_WORK_ITEM_SIZE);
            CL_STATUS_CASE(CL_INVALID_GLOBAL_OFFSET);
            CL_STATUS_CASE(CL_INVALID_EVENT_WAIT_LIST);
            CL_STATUS_CASE(CL_INVALID_EVENT);
            CL_STATUS_CASE(CL_INVALID_OPERATION);
            CL_STATUS_CASE(CL_INVALID_GL_OBJECT);
            CL_STATUS_CASE(CL_INVALID_BUFFER_SIZE);
            CL_STATUS_CASE(CL_INVALID_MIP_LEVEL);
            CL_STATUS_CASE(CL_INVALID_GLOBAL_WORK_SIZE);
    #undef CL_STATUS_CASE
            default: return "unknown macro name";
        }
}
}  // namespace ocl
}  // namespace cldnn
